# Erstellen von Bubbleplot anhand der Tordifferenz, der Punkte und der Punktedifferenz zum Letzten

## 1.) Erstellen Endtabelle der Bundesligasaison 2012/2013

data <- bundesliga_12_13
ct_table <-
  function(data, type = 'total', separator = '-') {
    if (! type %in% c('total', 'home', 'away')) {
      stop('The type argument needs to be either total, home or away.')
    }
    
    n <- nrow(data)
    
    for (i in 1:n) {
      data[i,] <- as.character(data[i,])
    }
    
    ranking_names <- c('CLUB',
                       'P',
                       'PT',
                       'W',
                       'D',
                       'L',
                       'GF',
                       'GA',
                       'GD',
                       'PTS',
                       'PDF',
                       'PDL')
    
    ranking <- data.frame(matrix(ncol = length(ranking_names), nrow = 0))
    names(ranking) <- ranking_names
    
    ranking_inner <- function(type_inner) {
      for (j in 1:n) {
        if (type_inner == 'home') {
          element = data[i, j]
        } else {
          element = data[j, i]
        }
        
        if (is.na(element)) {
          next
        }
        
        total$P <- total$P + 1
        result <- as.numeric(strsplit(element, separator)[[1]])
        
        if (type_inner == 'home') {
          gf <- result[1]
          ga <- result[2]
        } else {
          gf <- result[2]
          ga <- result[1]
        }
        
        total$GF <- total$GF + gf
        total$GA <- total$GA + ga
        
        if (gf > ga) {
          total$W <- total$W + 1
          total$PTS <- total$PTS + 3
        } else if (gf == ga) {
          total$D <- total$D + 1
          total$PTS <- total$PTS + 1
        } else {
          total$L <- total$L + 1
        }
      }
      
      return(total)
    }
    
    for (i in 1:n) {
      total <- as.list(vector(length = length(ranking_names)))
      names(total) <- ranking_names
      
      if (type == 'total' | type == 'home') {
        total <- ranking_inner('home')
      }
      
      if (type == 'total' | type == 'away') {
        total <- ranking_inner('away')
      }
      
      total$CLUB <- row.names(data[i,])
      total$GD <- total$GF - total$GA
      
      ranking[nrow(ranking) + 1,] <- total
    }
    
    ranking <- ranking[order(as.numeric(ranking[, 'PTS']),
                             as.numeric(ranking[, 'GD']),
                             decreasing = TRUE),]
    row.names(ranking) <- 1:n
    
    ranking[, 'PT'] <- (n - 1) * 2
    ranking[, 'PDF'] <- ranking[, 'PTS'] - ranking[1, 'PTS']
    ranking[, 'PDL'] <- ranking[, 'PTS'] - ranking[n, 'PTS']
    
    return(ranking)
  }
ct_table(data)


## 2.) Einfügen der uniquen Abkürzungen // Leider nicht ganz erfolgreich, da Warnmeldung

data <- bundesliga_12_13
ct_abbrev <-
  function(data) {
    data <- gsub('ä', 'ae', data)
    data <- gsub('ü', 'ue', data)
    data <- gsub('ö', 'oe', data)
    data <- gsub('Ü', 'Ue', data)
    data <- gsub('Ä', 'Ae', data)
    data <- gsub('Ö', 'Oe', data)
    data <- gsub('ß', 'ss', data)
    
    data <- toupper(gsub('[[:blank:]]|[[:digit:]]|[[:punct:]]', '', x = data))
    short <- substr(data, 1, 3)
    
    if (length(short) != length(unique(short))) {
      dup <- duplicated(short) | duplicated(short, fromLast = TRUE)
      
      n <- max(nchar(data[dup]))
      o <- length(short[dup])
      
      for (i in 4:n) {
        if (length(unique(substr(data[dup], i, i))) == o) {
          for (j in 1:o) {
            short[dup][j] <- sub('.$',
                                 substr(data[dup][j], i, i),
                                 short[dup][j])
          }
          
          break
        }
      }
    }
    
    if (length(short) != length(unique(short))) {
      warning('Failed to make abbreviations unique.')
    }
    
    return(short)
  }
ct_abbrev(data)

## Auszug erfolgloser Versuch) 

> ct_abbrev(data)

[1] "CNA" "CNA" "CNA" "CNA" "CNA" "CNA" "CNA" "CNA" "CNA" "CNA" "CNA" "CNA" "CNA" "CNA" "CNA"
[16] "CNA" "CNA" "CNA"
Warnmeldung:
  In ct_abbrev(data) : Failed to make abbreviations unique.

## 3. ) Erstellen Bubbleplot mit symbols-Funktion anhand der Endtabelle Bundesliga 2012/2013
## Da wir eine Tabelle ausgegeben bekomomen haben, können wir daraufaufbauend die x- und y-Werte
## und den Wert für den Kreis festlegen
## Mit der symbols-Funktion und vorher festgelegten Werten können wir erst einmal rudimentär Kreise erstellen

x <- ct_table(data)$PTS
y <- ct_table(data)$GD
circles <- ct_table(data)$PDL
symbols(x, y, circles)

## Zusätzliche Überlegungen) Man könnte sich überlegen einen anderen Raduis für die Kreise festzulegen: 
## radius <- sqrt( ct_table$ .../ pi ) einbauen, um eine verbesserte Darstellung zu erhalten


## 4.) Finale Erstellung des Bubbleplots // Es sei angemerkt, dass man hier noch einige andere Features einbauen könnte
symbols(x, y, circles, inches=0.35, fg="white", bg="red", xlab="Points", ylab="Goal Difference")
text(x, y, ct_table(data)$CLUB, cex=0.5)


## 5.) Alternative Vorschlag zur Erstellung einens Plot in Kreisform (eine ganz schlechte:-))
## Erstellen Kreisdiagramm anhand der Endtabelle / y-Wert: Goaldifferce (GD); x-Wert: Points(PTS)

p1 <- c(66,39)
p2 <- r <- sqrt(sum((5-18)^2))

eqscplot(x=c(p1[1], p2[1]),
         y=c(p1[2], p2[2]), 
         ylim=c(-5,100), xlim=c(-5,100))
draw.circle(x=p1[1], y=p1[2], radius=(r))

## Diese Alternative soll wirklich nur veranschaulichen, dass ich die verschiedensten Möglichkeiten 
## zur Erstellung eines Bubbleplot durchdacht habe. Ansonsten kann man diese Möglichkeit gepflegt in 
## in die Tonne kloppen:-)...